
class Bank implements Runnable{//定义一个银行类，该类实现Runnable接口
    int money = 5000;//银行账户初始存款数
    String p;//取款人

    @Override//被synchronized关键字修饰 - 以实现同步处理，防止账户余额出现混乱
    public synchronized void run() {
        p = Thread.currentThread().getName();//当前线程名字为取款人名字
        for(int i=1;i<=3;i++){//取款人连续取款三次
            money -= 500;//每次取出500块
            try {
                Thread.sleep(500); //取出后休息0.5秒
            }catch(InterruptedException e) {}
            //输出取款人和每次取款后的余额
            System.out.println(p + " : " + money);
        }
    }
}

public class TestDemo3 {
    public static void main(String[] args) {
        Bank bank = new Bank();//实例化一个银行对象

        Thread Zhang = new Thread(bank,"张三");//创建Zhang线程，并设置名字为“张三”
        Thread Li = new Thread(bank,"李四");//创建Li线程，并设置名字为“李四”
        Thread Wang = new Thread(bank,"王五");//创建Wang线程，并设置名字为“王五”

        Zhang.start();//启动Zhang线程
        Li.start();//启动Li线程
        Wang.start();//启动Wang线程
    }
}
